// Decompiled by Jad v1.5.8e. Copyright 2001 Pavel Kouznetsov. // Jad home page: http://www.geocities.com/kpdus/jad.html // Decompiler options: braces fieldsfirst space lnc package com.google.gson.internal.bind; import com.google.gson.FieldNamingStrategy; import com.google.gson.Gson; import com.google.gson.TypeAdapter; import com.google.gson.TypeAdapterFactory; import com.google.gson.annotations.SerializedName; import com.google.gson.internal.ConstructorConstructor; import com.google.gson.internal.Excluder; import com.google.gson.internal.Primitives; import com.google.gson.reflect.TypeToken; import java.lang.reflect.Field; import java.util.LinkedHashMap; import java.util.Map; // Referenced classes of package com.google.gson.internal.bind: // i, j public final class ReflectiveTypeAdapterFactory implements TypeAdapterFactory { private final ConstructorConstructor a; private final FieldNamingStrategy b; private final Excluder c; public ReflectiveTypeAdapterFactory(ConstructorConstructor constructorconstructor, FieldNamingStrategy fieldnamingstrategy, Excluder excluder) { a = constructorconstructor; b = fieldnamingstrategy; c = excluder; } private j a(Gson gson, Field field, String s, TypeToken typetoken, boolean flag, boolean flag1) { return new i(this, s, flag, flag1, gson, typetoken, field, Primitives.isPrimitive(typetoken.getRawType())); } private String a(Field field) { SerializedName serializedname = (SerializedName)field.getAnnotation(com/google/gson/annotations/SerializedName); if (serializedname == null) { return b.translateName(field); } else { return serializedname.value(); } } private Map a(Gson gson, TypeToken typetoken, Class class1) { LinkedHashMap linkedhashmap; java.lang.reflect.Type type; linkedhashmap = new LinkedHashMap(); if (class1.isInterface()) { return linkedhashmap; } type = typetoken.getType(); _L6: Field afield[]; int k; int l; if (class1 == java/lang/Object) { break; /* Loop/switch isn't completed */ } afield = class1.getDeclaredFields(); k = afield.length; l = 0; _L2: Field field; boolean flag; boolean flag1; if (l >= k) { break MISSING_BLOCK_LABEL_198; } field = afield[l]; flag = excludeField(field, true); flag1 = excludeField(field, false); if (flag || flag1) { break; /* Loop/switch isn't completed */ } _L4: l++; if (true) goto _L2; else goto _L1 _L1: j j2; field.setAccessible(true); java.lang.reflect.Type type1 = com.google.gson.internal..Gson.Types.resolve(typetoken.getType(), class1, field.getGenericType()); j j1 = a(gson, field, a(field), TypeToken.get(type1), flag, flag1); j2 = (j)linkedhashmap.put(j1.g, j1); if (j2 == null) goto _L4; else goto _L3 _L3: throw new IllegalArgumentException((new StringBuilder()).append(type).append(" declares multiple JSON fields named ").append(j2.g).toString()); typetoken = TypeToken.get(com.google.gson.internal..Gson.Types.resolve(typetoken.getType(), class1, class1.getGenericSuperclass())); class1 = typetoken.getRawType(); if (true) goto _L6; else goto _L5 _L5: return linkedhashmap; } public TypeAdapter create(Gson gson, TypeToken typetoken) { Class class1 = typetoken.getRawType(); if (!java/lang/Object.isAssignableFrom(class1)) { return null; } else { return new Adapter(a.get(typetoken), a(gson, typetoken, class1), null); } } public boolean excludeField(Field field, boolean flag) { return !c.excludeClass(field.getType(), flag) && !c.excludeField(field, flag); } private class Adapter extends TypeAdapter { private final ObjectConstructor a; private final Map b; public Object read(JsonReader jsonreader) { Object obj; if (jsonreader.peek() == JsonToken.NULL) { jsonreader.nextNull(); return null; } obj = a.construct(); jsonreader.beginObject(); _L1: j j1; if (!jsonreader.hasNext()) { break MISSING_BLOCK_LABEL_111; } String s = jsonreader.nextName(); j1 = (j)b.get(s); if (j1 == null) { break MISSING_BLOCK_LABEL_72; } if (j1.i) { break MISSING_BLOCK_LABEL_91; } IllegalStateException illegalstateexception; jsonreader.skipValue(); goto _L1 try { j1.a(jsonreader, obj); } // Misplaced declaration of an exception variable catch (IllegalStateException illegalstateexception) { throw new JsonSyntaxException(illegalstateexception); } catch (IllegalAccessException illegalaccessexception) { throw new AssertionError(illegalaccessexception); } goto _L1 jsonreader.endObject(); return obj; } public void write(JsonWriter jsonwriter, Object obj) { if (obj == null) { jsonwriter.nullValue(); return; } jsonwriter.beginObject(); try { Iterator iterator = b.values().iterator(); do { if (!iterator.hasNext()) { break; } j j1 = (j)iterator.next(); if (j1.h) { jsonwriter.name(j1.g); j1.a(jsonwriter, obj); } } while (true); } catch (IllegalAccessException illegalaccessexception) { throw new AssertionError(); } jsonwriter.endObject(); } private Adapter(ObjectConstructor objectconstructor, Map map) { a = objectconstructor; b = map; } Adapter(ObjectConstructor objectconstructor, Map map, i k) { this(objectconstructor, map); } } }